package com.dgj.utils.baidu.echarts;

import org.nutz.json.Json;
import org.nutz.json.JsonFormat;

import com.dgj.utils.baidu.echarts.code.Magic;
import com.dgj.utils.baidu.echarts.code.Orient;
import com.dgj.utils.baidu.echarts.code.X;
import com.dgj.utils.baidu.echarts.feature.DataView;
import com.dgj.utils.baidu.echarts.feature.MagicType;
import com.dgj.utils.baidu.echarts.feature.Mark;
import com.dgj.utils.baidu.echarts.feature.Restore;
import com.dgj.utils.baidu.echarts.feature.SaveAsImage;
import com.dgj.utils.baidu.echarts.series.Funnel;
import com.dgj.utils.baidu.echarts.series.Pie;

/**
 * 饼图Option
 * 
 * @author 李家福 create at 2015年7月8日 下午4:36:50
 * 
 */
public class PieOption extends Option {

	/**
	 * 饼图Option中pie对象,在实例化Option时即生成一pie对象
	 * */
	private Pie pie;
	/**
	 * 图例（详见legend），每个图表最多仅有一个图例，混搭图表共享
	 * */
	private Legend legend;

	private static final long serialVersionUID = 1L;

	{
		// 设置可拖拽重计算为true
		this.calculable(true);
		// 设置默认的工具条
		this.toolbox()
				.feature(Mark.mark.show(true), DataView.dataView.show(true).readOnly(false),
						new MagicType(Magic.pie, Magic.funnel, com.dgj.utils.baidu.echarts.feature.MagicType.Option.me().funnel(Funnel.me().funnel("25%", X.left, "50%", 1548))).show(true),
						Restore.restore.show(true), SaveAsImage.saveAsImage.show(true)).show(true);
	}

	/**
	 * 实例化饼图Option对象
	 * */
	public static PieOption me() {
		return new PieOption();
	}

	/**
	 * 重写toString方法
	 * */
	@Override
	public String toString() {
		return Json.toJson(this, JsonFormat.nice());
	}

	/**
	 * 设置pie值
	 * */
	public PieOption Pie(Pie pie) {
		this.pie = pie;
		return this;
	}

	/**
	 * pie
	 * */
	public Pie pie() {
		if (this.pie == null) {
			this.pie = new Pie();
		}
		// 设置饼图默认的半径,圆心位置等属性
		pie.radius("55%").center("50%", "50%");
		return this.pie;
	}

	/**
	 * 获取pie
	 */
	public Pie getPie() {
		return pie;
	}

	/**
	 * 设置pie
	 * 
	 * @param pie
	 */
	public void setPie(Pie pie) {
		this.pie = pie;
	}

	/**
	 * 获取图例
	 */
	@Override
	public Legend getLegend() {
		return legend;
	}

	/**
	 * 设置图例
	 * 
	 * @param legend
	 */
	@Override
	public void setLegend(Legend legend) {
		this.legend = legend;
	}

	/**
	 * 获取饼图图例,</br>该图例有默认样式(垂直排列居左侧)
	 * */
	@Override
	public Legend legend() {
		if (this.legend == null) {
			this.legend = Legend.me();
			this.legend.orient(Orient.vertical).x(X.left);
		}
		return this.legend;
	}

	/**
	 * 组装饼图Option
	 * 
	 * @param title
	 *            设置标题
	 * @param tooltip
	 *            设置tooltip
	 * @param legend
	 *            设置图例
	 * @param pieOption
	 *            饼图option
	 * @param pie
	 *            饼图
	 * @return
	 */
	public static PieOption gen(Title title, Tooltip tooltip, Legend legend, PieOption pieOption, Pie pie) {
		pieOption.title(title);
		pieOption.tooltip(tooltip);
		pieOption.legend(legend);
		pieOption.series().add(pie);
		return pieOption;
	}
}
